home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 80 / CD Actual 80 Julio-Agosto 2003.iso / Linux / LinuxGazette / lg / issue47 / misc / makarov / oberon2.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-14  |  3.2 KB  |  102 lines

  1. #include "oberon2.h"
  2.  
  3.  
  4.  
  5. static unsigned short program [] = {
  6.  3, 4, 5, 69, 294, 865, 876, 70, 295, 1,
  7.  1007, 8, 4, 9, 2, 6, 4, 73, 295, 1,
  8.  4, 74, 295, 1, 284, 5, 2, 75, 301, 1,
  9.  67, 288, 1129, 13, 1158, 5, 286, 77, 301, 1,
  10.  67, 278, 1119, 13, 925, 5, 286, 78, 301, 1,
  11.  67, 268, 1254, 16, 915, 5, 286, 80, 2, 1,
  12.  81, 302, 1, 82, 294, 895, 1095, 82, 281, 868,
  13.  302, 82, 294, 887, 1087, 82, 294, 860, 5, 803,
  14.  5, 268, 19, 83, 299, 1, 79, 2, 1, 1066,
  15.  2, 78, 294, 1, 4, 74, 295, 1, 288, 16,
  16.  869, 68, 275, 1, 279, 19, 78, 294, 1, 4,
  17.  16, 4, 20, 2, 67, 295, 1039, 2, 84, 304,
  18.  1, 22, 1070, 74, 295, 1, 288, 23, 24, 840,
  19.  2, 88, 311, 1, 82, 296, 1, 1018, 20, 68,
  20.  295, 1, 289, 67, 297, 1161, 16, 822, 283, 8,
  21.  2, 89, 297, 1, 27, 814, 2, 17, 82, 2,
  22.  777, 2, 67, 306, 1006, 73, 296, 1, 1024, 419,
  23.  82, 417, 1, 83, 1137, 20, 412, 91, 310, 1,
  24.  1012, 29, 835, 93, 298, 1, 1006, 29, 829, 286,
  25.  94, 295, 1, 824, 8, 393, 95, 328, 1, 993,
  26.  24, 94, 297, 1, 813, 8, 382, 71, 295, 1,
  27.  378, 96, 295, 1, 289, 977, 97, 295, 1, 973,
  28.  74, 295, 1, 284, 16, 792, 96, 295, 1, 278,
  29.  94, 266, 263, 98, 299, 1, 956, 36, 779, 8,
  30.  348, 100, 298, 1, 773, 38, 946, 341, 102, 307,
  31.  1, 4, 10, 939, 27, 937, 103, 295, 1, 933,
  32.  36, 756, 8, 325, 104, 297, 1, 750, 8, 319,
  33.  105, 310, 1, 1043, 36, 742, 96, 298, 1, 1037,
  34.  36, 736, 286, 94, 295, 1, 731, 8, 300, 106,
  35.  295, 1, 296, 107, 294, 1, 68, 2, 1, 155,
  36.  4, 72, 294, 1, 4, 2, 4, 108, 295, 1,
  37.  2, 109, 2, 1, 2, 4, 72, 296, 1, 4,
  38.  851, 85, 297, 1, 987, 23, 282, 81, 295, 1,
  39.  278, 82, 2, 1, 821, 20, 272, 882, 76, 294,
  40.  313, 110, 294, 310, 111, 294, 307, 112, 294, 304,
  41.  113, 294, 301, 114, 294, 298, 115, 294, 295, 76,
  42.  2, 1, 857, 2, 116, 371, 1, 296, 109, 294,
  43.  1, 117, 295, 1, 289, 118, 295, 1, 339, 119,
  44.  295, 1, 335, 120, 295, 1, 331, 121, 295, 1,
  45.  327, 82, 297, 1, 798, 20, 321, 122, 309, 1,
  46.  123, 295, 1, 314, 788, 97, 295, 1, 784, 74,
  47.  295, 1, 284, 60, 303, 755, 82, 300, 1, 83,
  48.  295, 1, 295, 888, 20, 108, 294, 304, 124, 294,
  49.  301, 125, 294, 298, 126, 294, 295, 127, 295, 1,
  50.  223, 116, 294, 288, 109, 294, 285, 128, 2, 1,
  51.  213, 710, 74, 2, 1, 288, 736, 74, 2, 1,
  52.  288, 694, 16, 692, 2, 0, 0
  53. };
  54.  
  55.  
  56.  
  57. int yyparse () {
  58.   int yychar = yylex (), pc = 0, code;
  59.   unsigned short call_stack [YYCALLSTACK_SIZE];
  60.   unsigned short *free = call_stack;
  61.  
  62.   *free++ = sizeof (program) / sizeof (program [0]) - 1;
  63.   while ((code = program [pc]) != 0 && yychar > 0) {
  64.     pc++;
  65.     if (code == 1)
  66.       yychar = yylex ();
  67.     else if (code == 2) /*return*/
  68.       pc = *--free;
  69.     else if ((code -= 2) < 63) {/*match*/
  70.       if (yychar == code)
  71.         pc++;
  72.       else {
  73.         yyerror ("Syntax error");
  74.         return 1;
  75.       }
  76.     } else if ((code -= 63) < 63) {
  77.       if (yychar == code)
  78.         pc++; /*skipif*/
  79.     } else if ((code -= 63) <= 562) /*goto*/
  80.       pc += code + -163;
  81.     else if ((code -= 563) <= 562) { /*gosub*/
  82.       if (free >= call_stack + YYCALLSTACK_SIZE) {
  83.         yyerror ("Call stack overflow");
  84.         return 1;
  85.       }
  86.       pc += code + -163;
  87.       *free++ = pc;
  88.     } else {
  89.       yyerror ("Internal error");
  90.       return 1;
  91.     }
  92.   }
  93.   if (code != 0 || yychar > 0) {
  94.     if (code != 0)
  95.       yyerror ("Unexpected EOF");
  96.     else
  97.       yyerror ("Garbage after end of program");
  98.     return 1;
  99.   }
  100.   return 0;
  101. }
  102.